package com.t2t.top.outmemory;

import java.util.ArrayList;
import java.util.List;

/**
 * 4. 运行时常量池导致的内存溢出
 * <p/>
 * VM Args：-XX:PermSize=10M -XX:MaxPermSize=10M
 *
 * @author yangpengfei
 */
public class RuntimeConstantPoolOOM {
    public static void main2(String[] args) {
        //使用List保持常量池引用，避免Full 回收常量池行为
        List<String> list = new ArrayList();
        int i = 0;
        while (true)
            list.add(String.valueOf(i++).intern());
    }

    public static void main(String[] args) {
        //jdk1.7中，toString之前main关键字已经在常量池中出现过了,str2.intern返回的是常量池中的引用，而str2则是新的，故返回false
        String str2 = new StringBuffer("ma").append("in").toString();
        System.out.println(str2.intern() == str2);

        String str1 = new StringBuffer("计算机").append("软件").toString();
        System.out.println(str1.intern() == str1);

        String str3 = new StringBuffer("计算机软").append("件").toString();
        System.out.println(str3.intern() == str3);

    }

}
